package com.hsyt.pfc.support.util;

import com.alibaba.fastjson.JSON;
import org.apache.commons.mail.HtmlEmail;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;

/**
 * @Description: 邮件发送帮助类，用于构建邮件对象并且发送邮件
 * @ClassName: MailUtil
 * @Package: com.hsyt.pfc.sync.synccenter.common.util
 * @Author: wangze@hsyuntai.com
 * @Date: 2016年2月24日 上午9:15:51
 * @Copyright: 版权归 HSYUNTAI 所有
 * <ModifyLog>
 * @ModifyContent:
 * @Author:
 * @Date: </ModifyLog>
 */
public class HtmlMailUtil {

    private static final Logger logger = LoggerFactory.getLogger(HtmlMailUtil.class);

    private String encoding;
    private String host;
    private String sender;
    private String userName;
    private String nickname;
    private String password;

    public String getEncoding() {
        return encoding;
    }

    public void setEncoding(String encoding) {
        this.encoding = encoding;
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getSender() {
        return sender;
    }

    public void setSender(String sender) {
        this.sender = sender;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * @param receiverEmail 收件人的邮箱
     * @param message       要发送的信息，由于使用了HtmlEmail，可以在邮件内容中使用HTML标签
     * @param subject       要发送的邮件主题
     * @return
     * @Description: 发送邮件
     * @Author: wangze@hsyuntai.com
     * @Date: 2016年8月31日 下午7:38:41
     */
    public void send(String receiverEmail, String message, String subject) {
        // 发送email  
        HtmlEmail email = new HtmlEmail();
        try {
            // 这里是SMTP发送服务器
            email.setHostName(this.host);
            // 字符编码集的设置  
            email.setCharset(this.encoding);
            // 收件人的邮箱  
            email.addTo(receiverEmail);
            // 发送人的邮箱  
            email.setFrom(this.sender, this.nickname);
            // 如果需要认证信息的话，设置认证：用户名-密码。分别为发件人在邮件服务器上的注册名称和密码  
            email.setAuthentication(this.userName, this.password);
            // 要发送的邮件主题  
            email.setSubject(subject);
            // 要发送的信息，由于使用了HtmlEmail，可以在邮件内容中使用HTML标签  
            email.setMsg(message);
            // 发送  
            email.send();
            logger.info(">>> " + subject + "发送成功，接受帐号：" + receiverEmail + "， 邮件内容： " + message);
        } catch (Exception e) {
            logger.info(">>> " + subject + "发送失败，接受帐号：" + receiverEmail + "， 邮件内容： " + message);
            logger.info("邮件发送异常！！！！！！！！！！！！！");
            e.printStackTrace();
        }
    }

    /**
     * 发送多人邮件
     *
     * @param emails  邮件地址集合
     * @param message 邮件内容
     * @param subject 邮件主题
     */
    public void send(List<String> emails, String message, String subject) {
        // 发送email  
        HtmlEmail email = new HtmlEmail();
        try {
            // 这里是SMTP发送服务器
            email.setHostName(this.host);
            // 字符编码集的设置  
            email.setCharset(this.encoding);
            // 收件人的邮箱  
            for (String e : emails) {
                email.addTo(e);
            }
            // 发送人的邮箱  
            email.setFrom(this.sender, this.nickname);
            // 如果需要认证信息的话，设置认证：用户名-密码。分别为发件人在邮件服务器上的注册名称和密码  
            email.setAuthentication(this.userName, this.password);
            // 要发送的邮件主题  
            email.setSubject(subject);
            // 要发送的信息，由于使用了HtmlEmail，可以在邮件内容中使用HTML标签  
            email.setMsg(message);
            // 发送  
            email.send();
            logger.info(">>> " + subject + "发送成功，接受帐号：" + JSON.toJSONString(emails) + "， 邮件内容： " + message);
        } catch (Exception e) {
            logger.info(">>> " + subject + "发送失败，接受帐号：" + JSON.toJSONString(emails) + "， 邮件内容： " + message);
            logger.info("邮件发送异常！！！！！！！！！！！！！");
            e.printStackTrace();
        }
    }
}
